package com.example.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mapper.OrderMapper;
import com.example.model.CartItem;
import com.example.model.Order;
import com.example.model.OrderItem;
import com.example.model.Product;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Service
public class OrderService extends ServiceImpl<OrderMapper,Order> {
    @Autowired
    CartItemService cartItemService;
    @Autowired
    OrderItemService orderItemService;
    @Autowired
    ProductService productService;


    public void createOrder(Order order, List<CartItem> cartItems) throws Exception {
        String orderCode = new SimpleDateFormat("yyyyMMddHHmmssSS").format(new Date())+ RandomUtils.nextInt();//日期加随机数组合成一个新的订单号，肯定不会重复
        order.setOrderCode(orderCode);//加入订单号
        order.setCreateDate(new Date());//输入生成日期
        order.setStatus(1);//初始默认未支付
        BigDecimal sum = new BigDecimal(0);//初始化总价为0
        int totalNumber = 0;//总件数
        for(CartItem item:cartItems){//累加总价格
            sum = sum.add(item.getSum());
            totalNumber ++;
        }
        order.setSum(sum);//放入总价
        order.setTotalNumber(totalNumber);
        save(order);
        for(CartItem item:cartItems){//以购物车模式遍历订单内对应的购物车列表，拿到单件商品的详细信息,注意，这里的OrderItem指的是单件产品
            OrderItem orderItem = new OrderItem();//循环创造OrderItem对象来接受需要的参数。
            orderItem.setOid(order.getOrderCode());//具体订单，我们使用order_id来标识
            orderItem.setNumber(item.getNumber());//购买数量
            orderItem.setSum(item.getSum());//拿到总价放入
            orderItem.setPid(String.valueOf(item.getPid()));
            orderItem.setName(item.getProduct().getName());
            orderItem.setPrice(item.getProduct().getPrice());
            if(item.getId()>0) {
                cartItemService.removeById(item);//提交订单后，删除该用户购物车内该件的产品数据，细！
            }
            Product product = productService.getById(orderItem.getPid());//找到对应的产品
            product.setStock(product.getStock()-item.getNumber());//在库存中剔除用户购买的数量
            product.setSaleCount(product.getSaleCount()+1);//销量+1.因为卖出去了一件
            productService.updateById(product);//产品数据更新
            orderItemService.save(orderItem);//订单记录上传。
        }

    }

    public List<Order> getOrder(Integer user_id){//根据提供的userId查询他的订单表
        QueryWrapper<Order> qw = new QueryWrapper<>();
        qw.eq("user_id",user_id);
        qw.eq("hidden",0);
        return this.baseMapper.selectList(qw);
    }

}
